package com.java.test1;

import org.junit.Test;

/**
 * @author shkstart
 * @create 2021-01-11 19:00
 */
public class StringFormatTest_1 {
    @Test
    /*
     *
     * 可用的 转换符：
     *       转换符             类型                  举例
     *
     *         d                 十进制整数           159
     *         x                 十六进制整数         9f
     *         o                 八进制整数           237
     *         f                 定点浮点数           15.9
     *         e                 指数浮点数           1.59e+0.1
     *         s                  字符串               hello
     *         c                   字符                 h
     *         b                    布尔               true
     *         %                   百分号               %
     *         n                 与平台有关的行分隔符
     *
     * 标志    目的                                  举例
     *
     * +:打印整数和负数的符号                          +3333.33
     * 0：数字前面补0                                  003333.33
     * -：左对齐                                       3333.33
     * （: 将负数括在括号内                           （3333.33）
     * $：指定将被格式化的参数索引，例如，%1$d, %1$x    159  9F
     *   将以十进制和十六进制格式打印第一个参数
     *
     * 可使用参数索引对一个值进行多种格式化输出：索引必须紧跟%符号。如下
     *           System.out.printf("%1$+09.3f,%1$-9.3f"，d)
     *
     * */
    public void test1() {
        //开发中不会这样直接输出，一般要对结果进行操作，或者接收
//        System.out.printf("你的年龄：%d岁,你的名字:%s  ,你的身高:%fcm  ,你的战斗力：25%%  ",20,"小明",185.2);
        String s1 = String.format("你的年龄：%d岁,  你的名字:%s,  %n你的身高:%fcm,  你的战斗力：25%%", 20, "  小明", 185.2);
        System.out.println(s1);
        /*
         * f格式：输出浮点数。有以下几种用法
         * %f：不指定宽度，整数部分全部输出并且输出6位小数，如果不够末尾补0；
         * %m.nf:输出共占m个位置（包含符号位和小数点）其中有n位小数，如数值宽度小于m，左端补空格
         * %-m.nf:输出共占n列，其中有n位小数，如数值宽度小于m右端补空格。
         *
         *f
         * */

        //将3.146--》3.15    %后边.2 表示 小数点后保留2位  不足补0
        String s2 = String.format("%.2f", 3.146);
        System.out.println(s2);            //3.15
        // %m.nf:输出共占m个位置（包含符号位和小数点）其中有n位小数，如数值宽度小于m，左端补空格
//        String s3=String.format("%8.2f",3.146);
        //不足补0   "%08.2f",3.146
        String s3 = String.format("%08.2f", 3.146);
        System.out.println(s3);             //00003.15

        String s5 = String.format("%4.2f", 333.14);
        System.out.println(s5);         //333.14
        //%-m.nf:输出共占n列，其中有n位小数，如数值宽度小于m右端补空格。
        String s4 = String.format("%-8.2f", 3.146);
        System.out.println(s4);          //3.15

        String s6 = String.format("%(8.2f", -1.1515);
        System.out.println(s6);         //(    1.15)

    }

    @Test
    public void test2() {
        //$：指定将被格式化的参数索引，例如，%1$d, %1$x
        //   将以十进制和十六进制格式打印第一个参数
        //索引是从0开始的
        String s1 = String.format("%-5.3f,再次取%1$f", 3.146);
        System.out.println(s1);         //3.146,再次取3.146000

        /*
         *
         * e格式：以指数形式输出浮点数。可用以下形式:
         * %e:规范化后的数值输出6位小数
         * %m.ne 和%-m.ne： m、n和“-”字符含义与前相同
         *
         * */
    }

}
